Есть две утилиты, которые заменяют ассемблер и дизассемблер. Первая утилита имеет имя ILasm.exe, она формирует EXE файл на основе языка MSIL. И есть вторая утилита с именем ildasm.exe, которая переводит из EXE в язык MSIL. Ну давайте посмотрим, как этот ассемблер выглядит. Итак, давайте напишем BAT файл, который проведет дизассемблирование нашего примера из 1 шага.
Ildasm.exe 1.exe /output:1.il
Запустим его и посмотрим, что там внутри:
// Microsoft (R) .NET Framework IL Disassembler. Version 1.0.2914.16
// Copyright (C) Microsoft Corp. 1998-2001. All rights reserved.
// VTableFixup Directory:
// No data.
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 1:0:2411:0
}
.assembly '1'
{
// --- The following custom attribute is added automatically, do not uncomment -------
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
// bool) = ( 01 00 00 01 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module '1.exe'
// MVID: {7FC658C1-CFED-4A2F-AE42-8AA970A29D5D}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x03000000
.class private auto ansi beforefieldinit MainApp
extends [mscorlib]System.Object
{
.method public hidebysig static void Main() cil managed
{
.entrypoint
// Code size 11 (0xb)
.maxstack 8
IL_0000: ldstr "Hello World using C#!"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} // end of method MainApp::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method MainApp::.ctor
} // end of class MainApp
//*********** DISASSEMBLY COMPLETE ***********************
// WARNING: Created Win32 resource file 1.res
Нда, новый ассемблер. Ну и обратную операцию. Нужно собрать из il обычный EXE. Пишем bat файл. Все получается.
